package 栈的压入弹出序列;

import java.util.Stack;

public class Solution {
    public static boolean IsPopOrder (int[] pushV, int[] popV) {
        //建立辅助栈
        Stack<Integer> s = new Stack<>();
        //两个变量依次访问两个序列
        int i = 0, j = 0;
        while (i < pushV.length) {
            //将push[i]压入栈中
            s.push(pushV[i]);
            //进入循环条件:
            //1.辅助栈不为空
            //2.popV数组没有遍历完
            //3当前popV[j]元素要与栈顶元素相同
            while (!s.empty() && j < popV.length && popV[j] == s.peek()) {
                //将匹配上的栈顶元素出栈
                s.pop();
                //下标向后移动
                j++;
            }
            //下标向后移动
            i++;
        }
        //只有栈为空才说明弹出序列没有问题
        return s.empty();
    }
}
